import type { logType } from './interface';
import { createErrorLog } from './errorLog';
import { useStorage } from '@/hook/useStorage/index';
import { createRoutesLog } from './routesLog';
import { createAxiosLog } from './axiosLog';
/**
 * 创建日志的功能函数
 * @author 莫若省
 * @param  logType 要生成的日志类型
 * @param  logParams 对应的日志对象
 */
export const createSystemLog = (logType: logType, logParams: any) => {
  // 日志类型枚举
  enum LogType {
    ErrorLog = 'errorLog',
    PageRouteLog = 'pageRouteLog',
    AxiosLog = 'axiosLog',
  }
  // 根据不同的日志类型生成对应的日志信息
  switch (logType) {
    case LogType.ErrorLog:
      createErrorLog(logParams);
      break;
    case LogType.PageRouteLog:
      createRoutesLog(logType, logParams);
      break;
    case LogType.AxiosLog:
      createAxiosLog(logType, logParams);
      break;
    default:
      throw new Error(`传入类型${logType}不存在,请参考约定日志类型枚举.`);
  }
};

/**
 * 存储日志的功能函数
 * @author 莫若省
 * @param logType 要存储的日志类型
 * @param logObj  日志对象
 */
export const saveLog = async (logType: logType, logObj: any) => {
  // 初始化日志容器
  const logContainer: any[] = useStorage.getItem(logType) || [];

  // 新日志插入
  logContainer.unshift(logObj);

  // 本地化日志容器
  await useStorage.setItem(logType, logContainer);
};
